import { get, post, put, del, patch } from '@/utils/request'
import { Role } from '@/types/user'
import { ApiResponse } from '@/types/auth'

/**
 * 角色管理相关服务类
 * 统一管理所有角色相关的API请求
 */
class RoleService {
  /**
   * 获取角色列表
   * @param params 查询参数
   * @returns Promise<ApiResponse<Role[]>> 角色列表
   */
  async getRoles(params?: any): Promise<ApiResponse<Role[]>> {
    return await get('/role', params)
  }

  /**
   * 根据ID获取角色
   * @param id 角色ID
   * @returns Promise<ApiResponse<Role>> 角色信息
   */
  async getRoleById(id: number): Promise<ApiResponse<Role>> {
    return await get(`/role/${id}`)
  }

  /**
   * 创建角色
   * @param data 角色数据
   * @returns Promise<ApiResponse<Role>> 创建的角色信息
   */
  async createRole(data: any): Promise<ApiResponse<Role>> {
    return await post('/role', data)
  }

  /**
   * 更新角色
   * @param id 角色ID
   * @param data 更新的角色数据
   * @returns Promise<ApiResponse<Role>> 更新后的角色信息
   */
  async updateRole(id: number, data: any): Promise<ApiResponse<Role>> {
    return await put(`/role/${id}`, data)
  }

  /**
   * 删除角色
   * @param id 角色ID
   * @returns Promise<ApiResponse> 删除结果
   */
  async deleteRole(id: number): Promise<ApiResponse> {
    return await del(`/role/${id}`)
  }

  /**
   * 更新角色状态
   * @param id 角色ID
   * @param status 新状态
   * @returns Promise<ApiResponse> 更新结果
   */
  async updateRoleStatus(id: number, status: number): Promise<ApiResponse> {
    return await patch(`/role/${id}/status`, status)
  }

  /**
   * 分配角色权限
   * @param data 权限分配数据
   * @returns Promise<ApiResponse> 分配结果
   */
  async assignRolePermissions(data: { roleId: number; menuIds: number[] }): Promise<ApiResponse> {
    return await post('/role/assign-permissions', data)
  }

  /**
   * 获取角色的菜单权限
   * @param roleId 角色ID
   * @returns Promise<ApiResponse> 菜单权限列表
   */
  async getRoleMenus(roleId: number): Promise<ApiResponse> {
    return await get(`/role/${roleId}/menus`)
  }
}

export default new RoleService()